home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 60 / IOPROG_60.ISO / soft / c++ / gsl-1.1.1-setup.exe / {app} / src / histogram / add2d.c < prev    next >
Encoding:
C/C++ Source or Header  |  2001-03-15  |  1.7 KB  |  67 lines

  1. /* histogram/add2d.c
  2.  * 
  3.  * Copyright (C) 1996, 1997, 1998, 1999, 2000 Brian Gough
  4.  * 
  5.  * This program is free software; you can redistribute it and/or modify
  6.  * it under the terms of the GNU General Public License as published by
  7.  * the Free Software Foundation; either version 2 of the License, or (at
  8.  * your option) any later version.
  9.  * 
  10.  * This program is distributed in the hope that it will be useful, but
  11.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  * General Public License for more details.
  14.  * 
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  */
  19.  
  20. #include <config.h>
  21. #include <stdlib.h>
  22. #include <gsl/gsl_errno.h>
  23. #include <gsl/gsl_histogram.h>
  24. #include <gsl/gsl_histogram2d.h>
  25.  
  26. #include "find2d.c"
  27.  
  28. int
  29. gsl_histogram2d_increment (gsl_histogram2d * h, double x, double y)
  30. {
  31.   int status = gsl_histogram2d_accumulate (h, x, y, 1.0);
  32.   return status;
  33. }
  34.  
  35. int
  36. gsl_histogram2d_accumulate (gsl_histogram2d * h,
  37.                 double x, double y, double weight)
  38. {
  39.   const size_t nx = h->nx;
  40.   const size_t ny = h->ny;
  41.  
  42.   size_t i = 0, j = 0;
  43.  
  44.   int status = find2d (h->nx, h->xrange, h->ny, h->yrange, x, y, &i, &j);
  45.  
  46.   if (status)
  47.     {
  48.       return GSL_EDOM;
  49.     }
  50.  
  51.   if (i >= nx)
  52.     {
  53.       GSL_ERROR ("index lies outside valid range of 0 .. nx - 1",
  54.          GSL_ESANITY);
  55.     }
  56.  
  57.   if (j >= ny)
  58.     {
  59.       GSL_ERROR ("index lies outside valid range of 0 .. ny - 1",
  60.          GSL_ESANITY);
  61.     }
  62.  
  63.   h->bin[i * ny + j] += weight;
  64.  
  65.   return GSL_SUCCESS;
  66. }
  67.